package com.sun.tool.annotations;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Method;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @auther Sunql
 * @create 2018/3/23
 **/
public class EntityUtil {

    private static final Logger log = LoggerFactory.getLogger(EntityUtil.class);

     /**
       * @Description   根据属性名获取对象该属性的值
       * @param         fieldName 属性名称
       * @param         obj       操作对象
       * @return        对象属性的值
       * @author        Sunql
       * @Date          2018/4/2 9:08
       * */


    public static Object getFieldValueByName(String fieldName, Object obj) {
        Object value = null;
        if(obj != null){
            try {
                String firstLetter = fieldName.substring(0, 1).toUpperCase();
                String getter = "get" + firstLetter + fieldName.substring(1);
                Method method = obj.getClass().getMethod(getter, new Class[] {});
                value =  method.invoke(obj, new Object[] {});
            } catch (Exception e) {
                log.debug("****************************************EntityUtil****************************************: " + e.getMessage());
            }
        }
        return value;
    }

    /**
     * @Description
     *  根据属性名attributeName 获取value值,
     *  并将value值转为String类型
     */
    public static String valueTurnsToString(String attributeName,Object obj){
        Object result = getFieldValueByName(attributeName,obj);
        if(result != null){
            return result.toString();
        }else{
            return null;
        }
    }


    /**
     * @Description
     * 校验 Value 是否为 Integer类型，
     * 是返回 true,其他类型返回 false
     * @return true/false
     */
    public static boolean checkNumber(String value){
        boolean result = true;
        if(value != null){
            try{
                Integer.parseInt(value.trim());
            }catch (Exception e){
                result = false;
            }
        }
        return result;
    }



    /**
     * @Description
     * 校验 Value 是否为 Integer类型，
     * 是返回 true,其他类型返回 false
     * @param
     * @return true/false
     */
    public static boolean checkValueNotNull(String value){
        boolean result = true;
        if(value == null || value.toString().trim().length() == 0){
            result = false;
        }
        return result;
    }




     /**
       * @Title        根据属性名attributeName ， 获取value值 的长度
       * @Description
       * @author        Sunql
       * @mender
       * @methodName
       * @Date         16:31 2018/3/23
       * @return
       * */
     public static int getValueLength(String value){
         int res_num = 0;
         if(value != null){
             res_num = value.length();
         }
         return res_num;
     }

     /**
       * @Title         根据属性名attributeName ， 获取value值,并对获取的指根据传入的正则规则校验
       * @Description  
       * @author        Sunql
       * @mender       
       * @methodName  
       * @Date         15:17 2018/3/26
       * @return 
       * */
     public static boolean regularCheck(String regex,String value){
         boolean result = false;
         if(value != null ){
             Matcher m = Pattern.compile(regex).matcher(value);
             result = m.find();
         }
         return result;
     }
     

}
